#!/bin/bash

# 检查是否传入了PID参数
if [ $# -ne 1 ]; then
    echo "请传入要监测服务的PID作为参数"
    exit 1
fi

# 获取传入的PID参数
PID=$1

# 定义最大重启次数
MAX_RESTART_COUNT=3

# 获取当前时间戳，用于日志记录
TIMESTAMP=$(date +%s)

# 定义一个函数来记录日志信息
function log_info {

    echo "`date +%Y-%m-%d ` - $1"

}

# 定义一个函数来发送警告邮件
function send_warning_email {
    local subject="服务监测警告：PID为 $PID 的服务出现问题"
    local body="PID为 $PID 的服务在监测过程中出现问题，连续重启三次失败，请及时查看！"
    java -jar /web/mail.jar
}

# 初始化重启次数计数器
RESTART_COUNT=0

while true; do
    # 检查进程是否存在
    if [ -z "$PID" ] ||! ps -p $PID > /dev/null; then
        log_info "PID为 $PID 的服务对应的进程不存在，尝试重启..."

        # 假设通过systemctl管理服务，这里需要根据实际情况替换为正确的重启命令
        java -jar /web/web_error.jar

        # 检查重启是否成功
        if [ $? -ne 0 ]; then
            RESTART_COUNT=$((RESTART_COUNT + 1))
            log_info "PID为 $PID 的服务重启失败，已重启 $RESTART_COUNT 次。"

            if [ $RESTART_COUNT -ge $MAX_RESTART_COUNT ]; then
                log_info "PID为 $PID 的服务连续重启三次失败，停止监测并发送警告邮件。"
                send_warning_email
                break
            fi
        else
            log_info "PID为 $PID 的服务重启成功。"
            RESTART_COUNT=0
        fi
    else
        log_info "PID为 $PID 的服务对应的进程存在，处于活跃状态。"
	echo $EMAIL_ADDRESS
    fi

    # 休眠一段时间，比如60秒，再进行下一次监测
    sleep 5
done
